﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////

// NotReviewedButNeeded

#pragma once

#include "GcmpLocatorCommands.h"

namespace gcmp
{
    class IAction;
    class ActionLocatorLinearMoveInput;
    class ActionLocatorRepositionInput;
    class ActionLocatorRotateInput;
    class ActionLocatorPlanarInput;
    /// \brief 罗盘Action构造器
    class GCMP_LOCATOR_COMMANDS_EXPORT ActionLocatorCreator
    {
    public:
        /// \brief 罗盘沿轴线移动Action生成者
        ///
        /// \param opActionInput    罗盘沿轴线移动 Action 配置项
        /// \return 返回罗盘沿轴线移动 Action 对象的指针
        static OwnerPtr<IAction> CreateLinearMoveAction(OwnerPtr<gcmp::ActionLocatorLinearMoveInput> opActionInput);

        /// \brief 罗盘重定位 Action 生成者
        ///
        /// \param opActionInput    罗盘重定位 Action 配置项
        /// \return 返回罗盘重定位 Action 对象的指针
        static OwnerPtr<IAction> CreateRepositionAction(OwnerPtr<gcmp::ActionLocatorRepositionInput> opActionInput);

        /// \brief 罗盘旋转 Action 生成者
        ///
        /// \param opActionInput    罗盘旋转 Action 配置项
        /// \return 返回罗盘旋转 Action 对象的指针
        static OwnerPtr<IAction> CreateRotateAction(OwnerPtr<gcmp::ActionLocatorRotateInput> opActionInput);

        /// \brief 罗盘面移动 Action 生成者
        ///
        /// \param opActionInput    罗盘面移动 Action 配置项
        /// \return 返回罗盘面移动 Action 对象的指针
        static OwnerPtr<IAction> CreatePlanarMoveAction(OwnerPtr<gcmp::ActionLocatorPlanarInput> opActionInput);
    };
}
